home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / pwdb / pwdb_public.h < prev    next >
C/C++ Source or Header  |  2005-10-13  |  9KB  |  281 lines

  1. /*
  2.  * external defines for generic calls to the pwdb libraries
  3.  *
  4.  * <pwdb/pwdb_public.h>
  5.  */
  6.  
  7. #ifndef PWDB_PUBLIC_H
  8. #define PWDB_PUBLIC_H
  9.  
  10. #include <time.h>                      /* we need this for time_t */
  11.  
  12. /* types */
  13.  
  14. /* database types */
  15.  
  16. enum {
  17.      PWDB_UNIX,         /* read the UNIX entry */
  18.      PWDB_SHADOW,         /* read the UNIX+SHADOW entry */
  19.      PWDB_NIS,             /* read the NIS database */
  20.      PWDB_RADIUS,         /* read the RADIUS database */
  21.      PWDB_DECNIS,         /* read Digital Enhanced Security DB */
  22. /* ---- */
  23.      _PWDB_MAX_TYPES         /* upper edge of list */
  24. };
  25. typedef int pwdb_type;
  26. #define PWDB_DEFAULT ((pwdb_type *)0)  /* library should search listed types */
  27.  
  28. /* access flags type */
  29.  
  30. typedef int pwdb_flag;
  31.  
  32. #define PWDB_F_NOACCESS     01 /* insufficient privilege to access database */
  33. #define PWDB_F_NOUPDATE     02 /* insufficient privilege to alter an entry */
  34. #define PWDB_F_PASS_PHRASE  04 /* to access the database, the process must
  35.                                 * supply a "pass_phrase" entry with a pre-
  36.                                 * allocated pwdb structure (use pwdb_new()
  37.                                 * call) */
  38.  
  39. /* some logic */
  40.  
  41. #define PWDB_TRUE                    1
  42. #define PWDB_FALSE                   0
  43.  
  44. /* public structures */
  45.  
  46. struct pwdb_entry {
  47.     char *name;                /* name of attribute */
  48.     int malloced;              /* flag to indicate if next
  49.                 * field is to be free()'d */
  50.     void *value;               /* data for value of attribute */
  51.     int length;                /* length in bytes of attribute */
  52.     int (*compare)(const void *data1, const void *data2, int length);
  53.                                /* comparison function */
  54.     int (*strvalue)(const void *data, char *strbuffer, int length);
  55.                                /* get a char representation of the
  56.                 * value in the strbuffer pre-alocated
  57.                 * by the calling application */
  58.     int max_strval_size;       /* the maximum value the above function will
  59.                 * will produce, so that the app will know
  60.                 * how much space to allocate */
  61. };
  62.  
  63. struct _pwdb_entry_list {
  64.     struct pwdb_entry *entry;         /* this attribute entry pointer */
  65.     struct _pwdb_entry_list *next;    /* linked list of entries       */
  66. };
  67.  
  68. struct pwdb {
  69.     pwdb_type *source;                /* origin of attribute data */
  70.     struct _pwdb_entry_list *data;    /* OPAQUE attribute data */
  71. };
  72.  
  73. /*
  74.  * FUNCTIONS
  75.  */
  76.  
  77. /* return codes */
  78.  
  79. enum {
  80.     PWDB_SUCCESS = 0,        /* "task completed successfully" */
  81.     PWDB_BAD_REQUEST,         /* "request not recognized" */
  82.     PWDB_TOO_WEAK,        /* "insufficient privilege for operation" */
  83.     PWDB_ABORT,          /* "internal failure - seek help" */
  84.     PWDB_BLOCKED,         /* "another process has locked resource" */
  85.     PWDB_MALLOC,          /* "insufficient memory for operation" */
  86.     PWDB_NOT_FOUND,            /* "requested item was not found" */
  87.     PWDB_PASS_PHRASE_REQD,    /* "pass_phrase needed to satisfy request"*/
  88.     PWDB_CONF_ERR,             /* "file " PWDB_CONF " needs to be fixed" */
  89.     PWDB_EXPIRED,              /* "pwdb structure is no longer valid" */
  90.     PWDB_UNSUPPORTED,          /* this function is not yet supported */
  91.     PWDB_TIMEOUT               /* request timed out - for networked databases */
  92. };
  93.  
  94. /*
  95.  * pwdb_type pointer lists, containing references to the preferred
  96.  * order of databses [initialized by pwdb_start()]
  97.  */
  98.  
  99. extern const pwdb_type **pwdb_policy;
  100. extern const pwdb_type **pwdb_group_policy;
  101.  
  102. /*
  103.  * These functions initialize the library functions:
  104.  *
  105.  * - pwdb_start reads the config file and creates the array const
  106.  *   pwdb_type *pwdb_policy[]. This array represents the preferred
  107.  *   order that sequences of various databases are to be accessed
  108.  *   in. It is also responsible for creating the pwdb_group_policy
  109.  *   list
  110.  *
  111.  * - note, pwdb_end free()'s all of the memory allocated by the library.
  112.  */
  113.  
  114. int pwdb_start(void);
  115. int pwdb_end(void);
  116.  
  117. /*
  118.  * pwdb structure allocation
  119.  *
  120.  * These functions maintain a linked list of allocated memory. That is
  121.  * cleaned up by pwdb_end()
  122.  */
  123.  
  124. int pwdb_new(const struct pwdb **new, int life_sec);
  125. int pwdb_delete(const struct pwdb **old);
  126.  
  127. /*
  128.  * This function is used to set the source of the indicate pwdb structure
  129.  */
  130.  
  131. int pwdb_source(const struct pwdb *old, const pwdb_type *src
  132.         , const char *class, const char *name, const int id);
  133.  
  134. /*
  135.  * This function resets the lifetime of this structure. It _cannot_
  136.  * extend the structure's life.
  137.  */
  138.  
  139. int pwdb_expire(const struct pwdb *old, int life_sec);
  140.  
  141. /*
  142.  * This function free()'s the memory associated with an entry returned
  143.  * by pwdb_get_entry.
  144.  */
  145.  
  146. int pwdb_delete_entry(const struct pwdb_entry **old);
  147.  
  148. /*
  149.  *
  150.  * These functions read/set entries in the pwdb structure. To delete an
  151.  * entry pwdb_set_entry should be passed an entry of length -1.
  152.  */
  153.  
  154. int pwdb_get_entry(const struct pwdb *p, const char *entry
  155.            , const struct pwdb_entry **e);
  156. int pwdb_set_entry(const struct pwdb *p, const char *entry, const void *datum
  157.            , const int length
  158.            , int (*compare)(const void *,const void *, int)
  159.            , int (*strvalue)(const void *, char *, int)
  160.            , int max_strval_size);
  161.  
  162. /* this function deletes a pwdb_entry returned from pwdb_get_entry */
  163.  
  164. int pwdb_entry_delete(const struct pwdb_entry **entry_p);
  165.  
  166. /*
  167.  * support functions
  168.  */
  169.  
  170. const char *pwdb_strerror(int errorno);
  171. const char *pwdb_db_name(pwdb_type src);
  172. void pwdb_print_pwdb_struct(const struct pwdb *);
  173. void debug_pwdb_struct(const struct pwdb *);
  174.  
  175. /*
  176.  * database reading
  177.  *
  178.  * this function returns the entry in a given database that
  179.  * corresponds to the indicated name or id (or both).
  180.  *
  181.  * at least id or name must be specified.
  182.  *
  183.  * NULL indicates error.
  184.  */
  185.  
  186. #define PWDB_ID_UNKNOWN      -3
  187. #define PWDB_NAME_UNKNOWN    ((const char *)0)
  188.  
  189. /* functions to probe behavior of the database(s) */
  190.        
  191. int pwdb_support(const char *class, const pwdb_type *db
  192.          , const char *entry_name);
  193.  
  194. int pwdb_flags(const char *class, const pwdb_type *db
  195.            , pwdb_flag *flag_p);
  196.  
  197. /* functions to obtain information from a database */
  198.  
  199. int pwdb_locate(const char *class, const pwdb_type *db
  200.         , const char *name, const int id
  201.         , const struct pwdb **p);
  202.  
  203. int pwdb_request(const char *class, const pwdb_type *db
  204.          , const char *entry_name
  205.                  , const struct pwdb **p);
  206.                  
  207. /*
  208.  * database writing
  209.  *
  210.  * These functions replace/add/delete an entry to the indicated database
  211.  * If the database does not exist it may be created with this entry.
  212.  */
  213.  
  214. /* copy all the entries of q into p (overwrite -> replace old entries in p) */
  215. int pwdb_merge(const struct pwdb *p, const struct pwdb *q, int overwrite);
  216.  
  217. int pwdb_replace(const char *class, const pwdb_type *
  218.          , const char *, const int, const struct pwdb **);
  219. int pwdb_remove(const char *class, const pwdb_type *
  220.         , const char *, const int, const struct pwdb **);
  221.  
  222. /*
  223.  * Misc. helper functions
  224.  */
  225.  
  226. char *_pwdb_delete_string(char *s);
  227. char *_pwdb_dup_string(const char *x);
  228.  
  229. /* test if a flag is set */
  230.  
  231. #define pwdb_on(m, flag)             ( ((m) & (flag)) ? 1:0 )
  232.  
  233.  
  234. #if defined(PWDB_HARD_CORE) && PWDB_HARD_CORE == 1
  235. /* --------------------------------------------------------------------- *
  236.    POSIX compliance. This is very minimal currently. Essentially, we
  237.    map the only four functions defined by POSIX.1 into four POSIX
  238.    compliant front end functions for libpwdb.  The functions are only
  239.    useful for probing the user-attributes defined by POSIX (username,
  240.    uid, gid, shell, and home; goupname, gid, and members).
  241.  
  242.    It is anticipated that the remaining attributes are only needed by
  243.    code that knows about the generic interface to libpwdb -- code that
  244.    can handle the more general API.
  245.  * --------------------------------------------------------------------- */
  246.  
  247. #include <sys/types.h>
  248. #include <pwd.h>
  249. #include <grp.h>
  250.  
  251. /* a list of still to be implemented functions */
  252.  
  253. /*
  254.   should #define misc functions -> _posix_undefined (for runtime warning)
  255.  */
  256.  
  257. /* now a list of functions that have been implemented */
  258. extern struct passwd *pwdb_posix_getpwnam(const char *user);
  259. #define getpwnam(user)       pwdb_posix_getpwnam(user)
  260.  
  261. extern struct passwd *pwdb_posix_getpwuid(uid_t uid);
  262. #define getpwuid(uid)       pwdb_posix_getpwuid(uid)
  263.  
  264. extern struct group *pwdb_posix_getgrnam(const char *group);
  265. #define getgrnam(group)      pwdb_posix_getgrnam(group)
  266.  
  267. extern struct group *pwdb_posix_getgrgid(gid_t gid);
  268. #define getgrgid(gid)        pwdb_posix_getgrgid(gid)
  269.  
  270. extern char *pwdb_posix_getlogin(void);
  271. #define getlogin             pwdb_posix_getlogin
  272.  
  273. /* All other cases get this... */
  274. extern void _posix_undefined(void);
  275.  
  276. /* --------------------------------------------------------------------- */
  277.  
  278. #endif /* PWDB_HARD_CORE */
  279.  
  280. #endif /* PWDB_PUBLIC_H */
  281.